package com.product.trace.service.impl;

import java.io.IOException;
import java.util.List;

import com.google.zxing.WriterException;
import com.product.common.utils.DateUtils;
import com.product.common.utils.QRcode.QRCodeUtils;
import com.product.common.utils.SecurityUtils;
import com.product.common.utils.uuid.UUID;
import com.product.trace.VO.ProductOutVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.product.trace.mapper.ProductOutMapper;
import com.product.trace.domain.ProductOut;
import com.product.trace.service.IProductOutService;

/**
 * 出库商品详情Service业务层处理
 *
 * @author wanghui
 * @date 2022-08-22
 */
@Service
public class ProductOutServiceImpl implements IProductOutService {
    @Autowired
    private ProductOutMapper productOutMapper;

    /**
     * 查询出库商品详情
     *
     * @param id 出库商品详情主键
     * @return 出库商品详情
     */
    @Override
    public ProductOut selectProductOutById(Integer id) {
        return productOutMapper.selectProductOutById(id);
    }

    /**
     * 查询出库商品详情列表
     *
     * @param productOut 出库商品详情
     * @return 出库商品详情
     */
    @Override
    public List<ProductOut> selectProductOutList(ProductOut productOut) {
        return productOutMapper.selectProductOutList(productOut);
    }

    /**
     * 新增出库商品详情
     *
     * @param productOut 出库商品详情
     * @return 结果
     */
    @Override
    public int insertProductOut(ProductOut productOut) {
        productOut.setCreateTime(DateUtils.getNowDate());
        //获取用户id
        String userId = String.valueOf(SecurityUtils.getUserId());
        //获取用户姓名
        String username = SecurityUtils.getUsername();
        //填充出库员id
        productOut.setStaffId(userId);
        //填充出库员姓名
        productOut.setCommodityStaff(username);
        return productOutMapper.insertProductOut(productOut);
    }

    /**
     * 修改出库商品详情
     *
     * @param productOut 出库商品详情
     * @return 结果
     */
    @Override
    public int updateProductOut(ProductOut productOut) {
        //除过监管人员，其他人员禁用修改，如果需要修改，必须提交申请，通过监管部门进行信息修改
        //填充监管人员id
        productOut.setCheckId(String.valueOf(SecurityUtils.getUserId()));
        //填充监管人员姓名
        productOut.setCheckStaff(SecurityUtils.getUsername());
        //判断是否审核通过
        String status = productOut.getCommodityStatus();
        if (status.trim().equals("0")) {
            //生成uuid
            UUID uuid = UUID.randomUUID();
            //实体类写入唯一标识
            productOut.setCommodityUuid(String.valueOf(uuid));
            QRCodeUtils qrCodeUtils = new QRCodeUtils();
            try {
                //生成二维码，并且获取二维码访问路径
                String path = qrCodeUtils.getQRcodeImage(String.valueOf(uuid));
                //实体类写入防伪码地址
                productOut.setSecturityCode(path);
            } catch (WriterException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }

        }
        productOut.setUpdateTime(DateUtils.getNowDate());
        return productOutMapper.updateProductOut(productOut);
    }

    /**
     * 批量删除出库商品详情
     *
     * @param ids 需要删除的出库商品详情主键
     * @return 结果
     */
    @Override
    public int deleteProductOutByIds(Integer[] ids) {
        return productOutMapper.deleteProductOutByIds(ids);
    }

    /**
     * 删除出库商品详情信息
     *
     * @param id 出库商品详情主键
     * @return 结果
     */
    @Override
    public int deleteProductOutById(Integer id) {
        return productOutMapper.deleteProductOutById(id);
    }

    /**
     * @param product 产品
     * @return {@link List }<{@link ProductOutVO }>
     * @Description 获取采购商品的详情（关联出库企业信息）
     */
    @Override
    public List<ProductOutVO> getProductOutInfoList(ProductOutVO product) {
        return productOutMapper.getProductOutInfoList(product);
    }
}
